package com.goldsign.pay.provider.user.service;

import java.text.SimpleDateFormat;
import java.util.Date;

public class MakeOrderNo {

	/** 订单号生成计数器 */
	private static long orderNoCount = 0L;

	/** 每毫秒生成订单号数量最大值 */
	private final static int MAX_COUNTS_PER_MS = 1000;

	public static String makeOrderNo() {
		// 最终生成的订单号
		String orderNo = "";
		long currentTime = 0L;
		
		synchronized (MakeOrderNo.class) {
			try {
				// 取系统当前时间作为订单号变量前半部分，精确到毫秒
				currentTime = Long.parseLong(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
			} catch (Exception e) {
				return null;
			}
			
			// 计数器到最大值归零，可扩展更大，目前1毫秒处理峰值1000个，1秒100万
			if (orderNoCount >= MAX_COUNTS_PER_MS) {
				orderNoCount = 0L;
			}
			
			// 组装订单号 ,计数值取后3位
			orderNo = currentTime + (MAX_COUNTS_PER_MS + orderNoCount + "").substring(1);
			orderNoCount++;
			
			return orderNo;
		}

	}

}
